/**
 * OPay Inc.
 * Copyright (c) 2016-2022 All Rights Reserved.
 */
package cc.dd.marketing.system.exception.base;

import cn.hutool.core.collection.CollectionUtil;

import java.util.Collection;

/**
 * @author sufeng.dong
 * @version $Id: Assert.java, v 0.1 2022-05-24 2:08 PM sufeng.dong Exp $$
 */
public interface Assert {

    /**
     * 创建异常
     *
     * @param args
     * @return
     */
    BaseException newException(String args);

    /**
     * 创建异常
     *
     * @param t
     * @param args
     * @return
     */
    BaseException newException(Throwable t, String args);

    /**
     * <p>断言对象<code>obj</code>非空。如果对象<code>obj</code>为空，则抛出异常
     *
     * @param obj 待判断对象
     */
    default void assertNotNull(Object obj) {
        if (obj == null) {
            throw newException(null);
        }
    }
    default void assertBoolean(Boolean b,String msg) {
        if (b) {
            throw newException(msg);
        }
    }
    default void assertBoolean(Boolean b) {
        if (b) {
            throw newException(null);
        }
    }

    default void collectionAssertNotNull(Collection collection) {
        if (CollectionUtil.isEmpty(collection)) {
            throw newException(null);
        }
    }

    /**
     * <p>断言对象<code>obj</code>非空。如果对象<code>obj</code>为空，则抛出异常
     * <p>异常信息<code>message</code>支持传递参数方式，避免在判断之前进行字符串拼接操作
     *
     * @param obj  待判断对象
     * @param args message占位符对应的参数列表
     */
    default void assertNotNull(Object obj, String args) {
        if (obj == null) {
            throw newException(args);
        }
    }
}
